package cn.pupil.springframework.context.annotation;

import cn.hutool.core.util.ClassUtil;
import cn.pupil.springframework.beans.factory.config.BeanDefinition;
import cn.pupil.springframework.context.stereotype.Component;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @Description: 对象扫描装配类，进行自动扫包，获取所有 @Component 注解的 Bean 对象的bean定义集合
 * @Author: pupil
 * @Date: 2024/11/24 下午 5:32
 */
public class ClassPathScanningCandidateComponentProvider {

    public Set<BeanDefinition> findCandidateComponents(String basePackage) {
        // 创建BeanDefinition的Set集合
        Set<BeanDefinition> candidates = new LinkedHashSet<>();
        // 扫描所有 @Component 注解的 Bean 对象，获取bean对象的Class
        Set<Class<?>> classes = ClassUtil.scanPackageByAnnotation(basePackage, Component.class);
        // 通过Class创建BeanDefinition添加到集合中
        for (Class<?> clazz : classes) {
            candidates.add(new BeanDefinition(clazz));
        }
        return candidates;
    }
}
